const https = require('https');

const SQLHelper = require('./SQLHelper')
///雪花算法生成id
const snowflake = require('./snowflake')
const { formatTime } = require('./util');
const { DATE } = require('mysql/lib/protocol/constants/types');
const { status } = require('express/lib/response');
const { hostname } = require('os');
const multer = require('multer')
const storage = multer.diskStorage({
    destination:'./uploads',//保存的路径
    filename:function(req,file,cd){
        ///获取图片类型
        let fileType = file.originalname.split('.')
        fileType = fileType[fileType.length - 1]
        cd(null,snowflake() + '.' +fileType)
    }
})
const upload = multer({storage:storage})
module.exports = function(app){
    ///登录拦截中间件
    function loginRouter(req,res,next){
        if(req.method.toUpperCase() =="OPTIONS"){
            next()
            return;
        }
        let token = req.headers.token
        if(token){
            SQLHelper(`select * from session where id = ${token} and state =1`).then(ret => {
                if(ret.length){
                    let session = ret[0]
                    ///2h
                    if(new Date().getTime() - session.createTime < 2 * 60 * 60 * 1000){
                        req.session = {
                            userId:session.userId,
                            userName:session.userName
                        }
                        next()
                    }else{
                        res.status(400).send({errorMsg:'登录超时'})
                    }
                 
                }else{
                    res.status(400).send({errorMsg:'当前用户未登录'})
                }
            })
        }else{
            res.status(400).send({errorMsg:'缺少token，请先进行登录'})
        }
    }
    ///让初登陆以为的所有小程序接口都先验证登陆
    app.use('/admin',loginRouter)

    //文件上传
    // app.post('/upload',upload.single('file'),(req,res)=>{
    //     res.send(req.file)
    // })

    ///微信登录
    app.post('/login', (req,res,next) => {
        let userName = req.body.userName
        let passWord = req.body.passWord
        if(userName && passWord){
            SQLHelper(`
                select * from user where userName = '${userName}'
            `).then(users=>{
                if(users.length){
                    //正常登录i
                    let user = users[0]
                    if(passWord == user.passWord){  
                        let token = snowflake()
                        ///缓存token到session表
                        SQLHelper(`
                        INSERT INTO session(id,userId,userName,inTime,createTime,platform) 
                        VALUES(${token},'${user._id}','${user.nickName}','${formatTime(new Date())}','${new Date().getTime()}','admin')
                        `).then(ret => {
                            res.send({
                                nickName:user.nickName,
                                token,
                                avatarUrl:user.photo,
                                _id:user._id
                            })
                        })
                    }else{
                        res.send({errorMsg:"密码错误"})
                    }
                }else{
                    res.send({errorMsg:"当前用户不存在，请先注册"})
                }
            })

        }else{
            res.send({errorMsg:"用户名和密码不能为空"})
        }
       
    })
    //退出登录
    app.get("/admin/logout",(req,res)=>{
        SQLHelper(`
            update session set outTime = '${formatTime(new Date())}' , state = 0 where id = '${req.headers.token}'
        `).then(ret =>{
            res.send({msg:"退出登录成功"})
        })
    })
    //修改密码
    app.post('/admin/changePassWord',(req,res)=>{
        console.log(req.body)
        let userId = req.session.userId
        let passWord = req.body.passWord
        let newPassWord = req.body.newPassWord
        if (passWord && newPassWord){
            //通过userid查询用户
            SQLHelper(`select passWord from user where _id = ${userId}`) .then(users=>{
                let user = users[0]
                //比对密码
                if(user.passWord == passWord){
                    //比对原密码并修改
                    SQLHelper(`update user set passWord = '${newPassWord}' where _id = '${userId}' `).then(ret =>{
                        res.send({Msg:"修改成功"})
                    })
                }else{
                    res.send({errorMsg:"原密码错误"})
                }
            })
        }else{
            res.send({errorMsg:"原密码和新密码不能为空"})
        }
    })
    ///获取首页项目
    ///pageSize每页大小 默认10 
    // pageNum   当前页  默认1
     //type 类型 非必填 bannner 轮播图， category 分类 recommend 为你推荐 
    app.get('/admin/index',(req,res)=>{
        let pageSize =req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum-1)* pageSize
        let title = req.query.title
        let type =req.query.type 
        let whereSql = 'from index_region where state = 1'
        //按类型查询
        if(type) whereSql += ` and type = '${type}'`
        //按标题关键字搜索
        if(title) whereSql += ` and title like "%${title}%"`
        SQLHelper(`select count(*) as total  ${whereSql} ;
        select * ${whereSql} limit ${pageSize} offset ${offset}
        `).then(ret=>{
            res.send({
                total:ret[0][0].total,
                rows:ret[1]
            })
        })
    })  
    ///新增首页项目
    ///img 图片地址 必填
    ///url 链接地址 非必填
    //title 标题 轮播图不填，其他必填
    //status 是否启用 ，非必填，1启用0停用
    //type 类型 非必填 bannner 轮播图， category 分类 recommend 为你推荐
    app.post('/admin/index',(req,res) => {
        let img = req.body.img, url = req.body.url, status = req.body.state
        let type = req.body.type ||"banner",title = req.body.title
        if(type !='banner' && !title){
            res.send({errorMsg:"标题不能为空"})
            return
        }
        if(status != 1) status = 0 //默认启动
        ///if(status) status = 1
        if(img){
            let createTime = new Date().getDate()
            SQLHelper(`
            INSERT INTO index_region(title,img,url,status,state,createTime,unitId,type) 
            VALUES('${title}','${img}','${url}','${status}','1','${createTime}','juzao','${type}')
            `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
    ///修改首页项目
    ///indexId主码_id 必填
    app.put('/admin/index',(req,res) => {
        if(req.body.indexId){
            ///需要修改的项
            let updateTime = new Date().getTime()
            let updateKey = ['img','url','title','status']
            let updateValues = [`updateTime = ${updateTime}`]
            for(let i = 0; i < updateKey.length; i ++){
                let key = updateKey[i],value = req.body[key]
                if(value !== undefined) updateValues.push(`${key}='${value}'`)///判断哪些项需要修改
            }
            SQLHelper(`UPDATE index_region set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
                res.send(ret)
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })



    ///删除地址 逻辑删除
    /// 主indexId码_id 必填
    app.delete('/admin/index',(req,res) => {
        let indexId = req.query.indexId
        if(indexId){
            SQLHelper(`
            UPDATE index_region
            set state = 0 
            WHERE _id = ${indexId}
            `).then(ret => {
                res.send(ret)
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
    //获取新闻article列表接口
    //前端传入数据有
    // title:"",
    // type:"article",
    // pageNum:1,
    // pageSize:5
    app.get('/admin/index/article',(req,res)=>{
        let pageSize =req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum-1)* pageSize
        let title = req.query.title
        let type =req.query.type 
        let whereSql = 'from article where state = 1'
        //按类型查询
        if(type) whereSql += ` and type = '${type}'`
        //按标题关键字搜索
        if(title) whereSql += ` and title like "%${title}%"`
        SQLHelper(`select count(*) as total  ${whereSql} ;
        select * ${whereSql} limit ${pageSize} offset ${offset}
        `).then(ret=>{
            res.send({
                total:ret[0][0].total,
                rows:ret[1]
            })
        })
    })  
    //新闻删除接口 单个删除
    app.delete('/admin/index/article',(req,res) => {
        let indexId = req.query.indexId
        if(indexId){
            SQLHelper(`
            UPDATE article
            set state = 0 
            WHERE _id = ${indexId}
            `).then(ret => {
                res.send(ret)
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
    ///修改新闻项目
    ///indexId主码_id 必填
    app.put('/admin/index/article',(req,res) => {
        if(req.body.indexId){
            ///需要修改的项
            let updateTime = new Date().getTime()
            let updateKey = ['img','digest','title','status','hot']
            let updateValues = [`updateTime = ${updateTime}`]
            for(let i = 0; i < updateKey.length; i ++){
                let key = updateKey[i],value = req.body[key]
                if(value !== undefined) updateValues.push(`${key}='${value}'`)///判断哪些项需要修改
            }
            SQLHelper(`UPDATE article set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
                res.send(ret)
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
    //增加新闻项目 
    //头部必填，标题必填 摘要 热门非必填
    app.post('/admin/index/article',(req,res) => {
        let img = req.body.img, digest = req.body.digest, status = req.body.state
        let title = req.body.title,hot = req.body.hot
        if(!img && !title && !digest){
            res.send({errorMsg:"标题，摘要，图片不能为空"})
            return
        }
        if(status != 1) status = 0 //默认不启动
        if(hot != 1) hot = 0//默认不热门
        ///if(status) status = 1
        if(img && title){
            let createTime = new Date().getDate()
            SQLHelper(`
            INSERT INTO article(title,img,digest,status,state,createTime,unitId,type,hot) 
            VALUES('${title}','${img}','${digest}','${status}','1','${createTime}','juzao','news','${hot}')
            `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
}
